package utils

import (
	"database/sql"
	"fmt"

	_ "github.com/go-sql-driver/mysql"
)

//var db *sql.DB //是一个连接池对象

//要想建立的包能够被调用，所自定义的包里面的函数首字母必须大写,切记
func ConnectDb() (db *sql.DB) {
	dsn := "root:root@tcp(localhost:33061)/test?charset=utf8" //"用户名:密码@[连接方式](主机名:端口号)/数据库名"
	//连接数据库
	db, err := sql.Open("mysql", dsn) //不会校验用户名密码是否正确，只校验数据源格式
	if err != nil {                   //dsn格式不正确时报错
		fmt.Println("open database err", err)
		return
	}
	fmt.Printf("db: %v\n", db)
	err = db.Ping() //用来测试账号密码
	if err != nil {
		fmt.Println("open database err", err)
		return
	}
	db.SetMaxOpenConns(10) //设置最大数据库连接数
	fmt.Println("连接数据库成功！")
	return db
}

//数据库更新
func Update(id int, name string) {
	db := ConnectDb()
	sqlStr := `Update user set name=? where id=?`
	fmt.Printf("db: %v\n", db)
	ret, err := db.Exec(sqlStr, name, id)
	if err != nil {
		fmt.Println("insert failed,err:", err)
		return
	}
	n, err := ret.RowsAffected()
	if err != nil {
		fmt.Println("get id failed,err:", err)
		return
	}
	fmt.Printf("更新了%d行数据\n", n)
}

//插入数据
func Insert(sql string, params ...interface{}) {
	db := ConnectDb()
	// 注意：这里必须是params... 不然会转成数组类型了
	res, err := db.Exec(sql, params...)
	// 打印上一次插入自增的id
	if res != nil {
		fmt.Println(res.LastInsertId())
	} else {
		fmt.Printf("插入失败：%v\n", err)
	}
}

//删除数据，八爷自己写个试试
